// #include <iostream>
// #include <vector>
// #include <unordered_map>
// using namespace std;
// struct T {
//     int t;
//     vector<int> p;
//     T(int x, vector<int>& nums): t(x), p(nums) {}
// };
// vector<T> a;
// signed main() {
//     int n;
//     cin >> n;
//     for(int i = 0; i < n; i++) {
//         int t, k;
//         cin >> t >> k;
//         vector<int> nums;
//         for(int i = 0; i < k; i++) {
//             int temp;
//             cin >> temp;
//             nums.push_back(temp);
//         }
//         a.push_back(T(t, nums));
//     }
//     for(int i = 0; i < n; i++) {
//         unordered_map<int, bool> h;
//         for(int j = i; a[i].t - a[j].t < 86400 && j >= 0; j--) {
//             for(auto& q : a[j].p) {
//                 h[q] = true;
//             }
//         }   
//         cout << h.size() << endl;
//     }
//     return 0;
// }


// 正确的做法
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

const int MAX_COUNTRY = 100000;
int cnt[MAX_COUNTRY + 1] = {0};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin >> n;
    queue<pair<int, vector<int>>> q;
    int diff_count = 0;

    for (int i = 0; i < n; i++) {
        int t, k;
        cin >> t >> k;
        vector<int> passengers(k);
        for (int j = 0; j < k; j++) {
            cin >> passengers[j];
        }

        while (!q.empty() && q.front().first <= t - 86400) {
            auto& old_ship = q.front();
            for (int country : old_ship.second) {
                cnt[country]--;
                if (cnt[country] == 0) {
                    diff_count--;
                }
            }
            q.pop();
        }

        for (int country : passengers) {
            if (cnt[country] == 0) {
                diff_count++;
            }
            cnt[country]++;
        }

        q.push({t, std::move(passengers)});

        cout << diff_count << '\n';
    }

    return 0;
}